#pragma once

#ifdef PLUGINICFNLIBSAMPLE_EXPORTS
#define PLUGINICFNLIBSAMPLE_API __declspec(dllexport)
#else
#define PLUGINICFNLIBSAMPLE_API __declspec(dllimport)
#endif

#include "DefSocketImageCurator.h"
#include "IPluginICFnLibSample.h"
#include "gLibDetails.h"

extern "C" void  *MXSTDMETHOD CreateClassInstance(const char *IId);

#pragma warning(suppress: 4275)
class PLUGINICFNLIBSAMPLE_API  PluginICFnLibSample : IPluginICFnLibSample
{

public:
	PluginICFnLibSample(void);
	virtual ~PluginICFnLibSample(void);
				//IMxPluginBase
	virtual long   MXSTDMETHOD DestroyPtr(void);
	virtual long   MXSTDMETHOD DuplicatePtr(void);
	virtual void * MXSTDMETHOD Dynamic_cast(const char *IId);
	virtual const char *MXSTDMETHOD GetInterfaceGUID(void)  { return IPluginICFnLibSampleIID::GUID(); }
	virtual const char *MXSTDMETHOD GetInterfaceName(void) { return IPluginICFnLibSampleIID::Name(); }
				//IMxPluginLibDetails
	virtual const char *MXSTDMETHOD GetLibName(void) { return ::gLibName();	}							//VS_VERSION_INFO::ProductName
	virtual const char *MXSTDMETHOD GetLibDescription(void) { return ::gLibDescription(); }				//VS_VERSION_INFO::FileDescription
	virtual const char *MXSTDMETHOD GetLibVersion(void) { return ::gLibVersion(); }						//VS_VERSION_INFO::ProductVersion
	virtual const char *MXSTDMETHOD GetLibOwnerName(void) { return ::gLibOwnerName();	}				//VS_VERSION_INFO::CompanyName
	virtual const char *MXSTDMETHOD GetLibCopyrightNotice(void) { return ::gLibCopyrightNotice(); }		//VS_VERSION_INFO::LegalCopyright
	virtual const char *MXSTDMETHOD GetLibID(void) { return ::gLibID(); }								//VS_VERSION_INFO::InternalName **** GUID **** - same as its folder name in PluginRootFolder
	virtual const char *MXSTDMETHOD GetLibSupportSite(void) { return "http://www.imagecurator.org";	}		
	virtual const char *MXSTDMETHOD GetLibLicenseName(void) { return "New BSD Licence"; }								
	virtual const char *MXSTDMETHOD GetLibLicenseURL(void)  { return "http://imagecurator.codeplex.com/license"; }	
	virtual const wchar_t *MXSTDMETHOD GetLibPathFilename(void) { return ::gLibPathFilename(); }		//filename returned by ::GetModuleFileName() of hModule in DllMain, DLL_PROCESS_ATTACH	
			
	virtual const char *MXSTDMETHOD GetSocketAppID(void) { return DefSocketImageCurator::SID(); }			//GUID provided by SocketImageProcXGUI, ImageCurator, etc - says this Plugin supports this application
				//IPluginICFnLibSample
	virtual const char *MXSTDMETHOD GetComment(void) { return "hello from PluginICFnLibSample"; }	

private:
	long _refCnt;
};



